package com.example.propertymanagement.controller;

import com.example.propertymanagement.entity.ParkingSpace;
import com.example.propertymanagement.entity.ParkingSpaceUsage;
import com.example.propertymanagement.service.ParkingSpaceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;

@RestController  // Spring 注解，表示该类为控制器，用于处理 HTTP 请求
@RequestMapping("/api/parking-space")  // 定义请求路径前缀
public class ParkingSpaceController {

    @Autowired
    private ParkingSpaceService parkingSpaceService;  // 注入停车位服务层

    /**
     * 获取某小区的所有停车位信息
     * @param communityId - 小区ID
     * @return List<ParkingSpace> - 该小区的所有停车位信息列表
     */
    @GetMapping("/community/{communityId}")
    public List<ParkingSpace> getParkingSpacesByCommunity(@PathVariable Integer communityId) {
        return parkingSpaceService.getAllParkingSpacesByCommunity(communityId);  // 获取并返回停车位列表
    }

    /**
     * 根据车位编号查找停车位信息
     * @param spaceCode - 车位编号
     * @return ParkingSpace - 匹配的停车位信息
     */
    @GetMapping("/code/{spaceCode}")
    public ParkingSpace getParkingSpaceByCode(@PathVariable String spaceCode) {
        return parkingSpaceService.getParkingSpaceByCode(spaceCode);  // 获取并返回指定车位的停车位信息
    }

    /**
     * 分配停车位给车辆使用
     * @param spaceId - 停车位ID
     * @param plateNumber - 车牌号码
     * @param vehicleOwner - 车主姓名
     * @param contactPhone - 联系电话
     * @param usageType - 使用类型
     * @param totalFee - 总费用
     * @param startTime - 开始时间
     * @param endTime - 结束时间
     * @return ParkingSpaceUsage - 创建的停车位使用记录
     */
    @PostMapping("/assign")
    public ParkingSpaceUsage assignParkingSpace(@RequestParam Integer spaceId,
                                                @RequestParam String plateNumber,
                                                @RequestParam String vehicleOwner,
                                                @RequestParam String contactPhone,
                                                @RequestParam Integer usageType,
                                                @RequestParam Double totalFee,
                                                @RequestParam Date startTime,
                                                @RequestParam Date endTime) {
        return parkingSpaceService.assignParkingSpace(spaceId, plateNumber, vehicleOwner, contactPhone, usageType, totalFee, startTime, endTime);  // 分配停车位并返回使用记录
    }

    /**
     * 获取某小区的停车位使用记录
     * @param communityId - 小区ID
     * @return List<ParkingSpaceUsage> - 该小区的所有停车位使用记录
     */
    @GetMapping("/usage/community/{communityId}")
    public List<ParkingSpaceUsage> getParkingSpaceUsageByCommunity(@PathVariable Integer communityId) {
        return parkingSpaceService.getParkingSpaceUsageByCommunity(communityId);  // 获取并返回停车位使用记录
    }
}
